package model;

import java.io.Serializable;

/**
 * Classe envoyer par tcp contenant la signalisation pour gerer une conversation
 * @author Lefevre, Thoue
 */
public class Signalisation implements Serializable{
    private String tagMessage;
    private float sampleRate;
    private int sampleSizeInBits;
    private int channels;
    private boolean signed;
    private boolean bigEndian;
    private User user;
    private String message;
    
    /**
     * Constructeur permettant d'envoyer une signalisation simple
     * @param tagMessage type de la signalisation envoyer
     */
    public Signalisation(EMessage tagMessage) {
        this.tagMessage = tagMessage.toString();
    }
    /**
     * Constructeur permettant d'envoyer une demande
     * @param user informations sur l'utilisateur demandant une conversation
     */
    public Signalisation(User user) {
        this.tagMessage = EMessage.DEMAND.toString();
        this.user = user;
    }
     /**
     * Constructeur permettant d'envoyer une acceptation
     * @param tagMessage type de la signalisation
     * @param user informations sur l'utilisateur acceptant une conversation
     */
    public Signalisation(EMessage tagMessage, User user) {
        this.tagMessage = tagMessage.toString();
        this.user = user;
    }
     /**
     * Constructeur permettant d'envoyer un message ecrit
     * @param message message ecrit
     */
     public Signalisation(String message) {
        this.tagMessage = EMessage.MESSAGE.toString();
        this.message = message;
    }
     /**
     * Constructeur permettant les informations du son
     * @param tagMessage type de la signalisation
     * @param sampleRate taux echantillonnage
     * @param sampleSizeInBits taille d'un echantillon
     * @param channels canal du son
     * @param signed signal signe ou non
     * @param bigEndian sens de lecture (poids faible ou poid fort en premier)
     */
    public Signalisation(EMessage tagMessage, float sampleRate, int sampleSizeInBits, int channels, boolean signed, boolean bigEndian) {
        this.tagMessage = tagMessage.toString();
        this.sampleRate = sampleRate;
        this.sampleSizeInBits = sampleSizeInBits;
        this.channels = channels;
        this.signed = signed;
        this.bigEndian = bigEndian;
    }    
    /**
     * Observateur bigEndian
     * @return vrai si le son est en bigEbdian
     */
    public boolean isBigEndian() {  return bigEndian;  }
    /**
     * Getter channel
     * @return le numero du cannal utilise pour le son
     */
    public int getChannels() {  return channels;   }
    /**
     * Getter sampleRate
     * @return le taux d'echantillonnage pour le son
     */
    public float getSampleRate() {   return sampleRate;  }
    /**
     * Getter sampleSizeInBits
     * @return taille d'un echantillon pour le son
     */
    public int getSampleSizeInBits() {   return sampleSizeInBits;   }
    /**
     * Observateur signed
     * @return vrai si le son est signe
     */
    public boolean isSigned() {    return signed;   }
    /**
     * Getter tagMessage
     * @return le type du message
     */
    public String getTagMessage() {   return tagMessage;   }
    /**
     * Getter user
     * @return les informations de l'emetteur
     */
    public User getUser() {   return user;    }
    /**
     * Getter message
     * @return le message ecrit envoye
     */
    public String getMessage() {   return message;    }
    
    /**
     * Observateur des messages d'informations de son
     * @return vrai si le message est un message d'informations de son
     */
    public boolean isInfoSound(){
        return this.tagMessage.equals(EMessage.INFOSOUND.toString());
    }
}